
#ifndef MD5_H
#define MD5_H

#include <stdint.h>
#include <stddef.h>

// MD5上下文结构体
typedef struct {
    uint32_t state[4];    // 存储中间和最终哈希值的状态数组
    uint32_t count[2];    // 记录消息长度的计数器(64位)
    uint8_t buffer[64];   // 512位消息块缓冲区
} MD5_CTX;

// 函数声明
void MD5_Init(MD5_CTX *context);  // 初始化MD5上下文
void MD5_Update(MD5_CTX *context, const uint8_t *input, size_t input_len); // 更新MD5计算
void MD5_Final(uint8_t digest[16], MD5_CTX *context); // 结束计算并输出结果
int MD5_File(const char *filename, uint8_t digest[16]); // 计算文件MD5
void MD5_ToString(const uint8_t digest[16], char output[33]); // 转换为可读字符串

#endif
